using OracleInternal.SqlAndPlsqlParser.LocalParsing.Ansi;
using OracleInternal.SqlAndPlsqlParser.RuleProcessors.ODPCommands;

namespace OracleInternal.SqlAndPlsqlParser.RuleProcessors
{
	internal class OracleMbEarleySqlPlsqlAnsiRuleProcessorTableDictionary : OracleMbEarleySqlPlsqlRuleProcessorTableDictionary
	{
		private static readonly object m_vObjectLock = new object();

		private static OracleMbEarleySqlPlsqlAnsiRuleProcessorTableDictionary s_vInstance = null;

		public new static OracleMbEarleySqlPlsqlAnsiRuleProcessorTableDictionary Instance
		{
			get
			{
				lock (m_vObjectLock)
				{
					if (s_vInstance == null)
					{
						s_vInstance = new OracleMbEarleySqlPlsqlAnsiRuleProcessorTableDictionary(OracleSqlAnsiEarleyParserGrammarDefinition.Instance);
					}
				}
				return s_vInstance;
			}
		}

		protected OracleMbEarleySqlPlsqlAnsiRuleProcessorTableDictionary(OracleSqlEarleyParserGrammarDefinition grammar)
			: base(grammar)
		{
		}

		protected override void Initialize(OracleSqlEarleyParserGrammarDefinition grammar)
		{
			m_vRuleProcessorTableDictionary.Add("empty", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyEmptyRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("ODPCommands", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbODPCommandsRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("unlabeled_nonblock_stmt", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyUnlabeledNonblockStmtRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("labeled_block_stmt", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyLabeledBlockStmtRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("block_stmt", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyBlockStmtRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("sql_stmt", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleySqlStmtRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("sql_query_or_dml_stmt", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleySqlQueryOrDmlStmtRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("aliased_dml_table_expression_clause", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyAliasedDmlTableExpressionClauseRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("where_clause", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyWhereClauseRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("returning_clause", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyReturningClauseRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("values_clause", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyValuesClauseRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("condition", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyConditionRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("expr", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyExprNNRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("bind_var", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyBindVarRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("simple_expression", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleySimpleExpressionRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("type_constructor_expression", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyTypeConstructorExpressionRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("column", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyColumnRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("literal", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyLiteralRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("create", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyCreateRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("select", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleySelectAnsiRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("call_statement", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyCallStatementRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("sqlplus_command", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleySqlPlusCommandRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("dblink", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyDbLinkRuleMultiProcessors.s_vRuleProcessorItems));
			m_vRuleProcessorTableDictionary.Add("scalar_subquery_expression", new OracleMbEarleyRuleMultiProcessorTable(grammar, OracleMbEarleyScalarSubqueryExpressionRuleMultiProcessors.s_vRuleProcessorItems));
		}
	}
}
